import axios, { AxiosRequestConfig } from 'axios';
import { ElLoading, ElMessage } from 'element-plus';

// const base_url = import.meta.env.VITE_APP_HOST;

// 创建实例
const request = axios.create({
    // baseURL: base_url,
    baseURL: '/',
});

// 引入router
// import router from '../router';

let loading: any;
function startLoading() {
    loading = ElLoading.service({
        lock: true,
        text: '拼命加载中...',
        background: 'rgba(0, 0, 0, 0.7)',
    });
}

function endLoading() {
    loading.close();
}

// 请求拦截器
request.interceptors.request.use(
    function (config) {
        // 加载动画
        startLoading();

        // 统一设置用户身份 token
        if (localStorage.eleToken) {
            config.headers.Authorization = localStorage.eleToken;
        }

        return config;
    },
    function (error) {
        return Promise.reject(error);
    }
);

// 响应拦截器
request.interceptors.response.use(
    function (response) {
        // 停止动画
        endLoading();

        // 统一处理接口响应错误，token过期无效、服务端异常等
        return response;
    },
    function (error) {
        // 停止动画
        endLoading();

        // 错误提醒
        ElMessage.error(error.response.data);

        // 获取错误状态码
        const { status } = error.response;
        if (status == 401) {
            ElMessage.error('token失效，请重新登录');
            // 清除token
            localStorage.removeItem('eleToken');
            // 跳转到登录页面
            // router.push({ path: '/login' });
        }
        return Promise.reject(error);
    }
);

// 包装request，实现泛型
export default <T = any>(config: AxiosRequestConfig) => {
    return request(config).then(res => {
        return res.data as T;
    });
};
